#include "project/initialization.h"

void
setActiveModel(short int op)
{
	active_model = op;
	
	// Seleciona o modelo inicial
	switch(active_model)
	{
		case 1:
			active_ply = ply1;
			break;

		default:
			break;			
	}
}

void
displayInit(void)
{
	// Inicializa o ambiente
	glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
	glClearDepth(1.0f);
	glEnable(GL_DEPTH_TEST);
	glDepthFunc(GL_LEQUAL);

	setActiveModel(1);
}

void
displayReshape(GLsizei width, GLsizei height)
{
	// Especifica a area de visualizacao na janela
	glViewport(0, 0, width, height);

	// Previne divisao por zero
	if( !height )
		height = 1;

	// Calcula a proporcao largura x altura
	GLfloat aspect = (GLfloat) width / (GLfloat) height;

	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();

	// Mantem a proporcao original da viewport caso a janela seja redimensionada
	if( height < width )
		gluOrtho2D(-1.0 * aspect, 1.0 * aspect, -1.0, 1.0);
	else
		gluOrtho2D(-1.0, 1.0, -1.0 * (1/aspect), 1.0 * (1/aspect));

	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
}

void
displayWindow(void)
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glLoadIdentity();

	drawWorldAxis();
	drawPlyModel(active_ply);

	// glutSwapBuffers implica implicitamente em uma chamada a funcao glFlush()
	glutSwapBuffers();

	// Checagem de erros em tempo de execucao (DEBUG no terminal)
	errCheck();
}
